class Benchmark(TimeReturn):
    '''这个观察者存储策略的*回报*和一个作为系统传递的数据之一的*参考资产*的*回报*。

    参数：

      - ``timeframe``（默认值：``None``）
        如果为``None``，则将报告整个回测期间的完整回报

      - ``compression``（默认值：``None``）

        仅用于亚日时间框架，例如通过指定“TimeFrame.Minutes”和60作为压缩来在小时时间框架上工作

      - ``data``（默认值：``None``）

        参考资产以进行比较。

        .. 注意：此数据必须已添加到具有``addata``，``resampledata``或``replaydata``的``cerebro``实例中。


      - ``_doprenext``（默认值：``False``）

        基准测试将从策略启动的点开始进行（即：当策略的最小周期满足时）。

        将其设置为``True``将从数据源的起始点记录基准测试值

      - ``firstopen``（默认值：``False``）

        保持为``False``可以确保值和基准之间的第一个比较点从0％开始，因为基准将不使用其开盘价。

        有关参数含义的完整说明，请参见``TimeReturn``分析器参考

      - ``fund``（默认值：``None``）

        如果为``None``，则会自动检测经纪人的实际模式（fundmode-True / False），以决定回报是基于总净资产价值还是基金价值。请参见经纪人文档中的``set_fundmode``

        将其设置为``True``或``False``以获得特定行为

    请记住，在``run``的任何时刻，可以通过查看索引为``0``的名称为*lines*的当前值来检查当前值。

    '''

class Value(Observer):
    '''这个观察者跟踪经纪人中包括现金在内的当前投资组合价值

    参数：

      - ``fund``（默认值：``None``）

        如果为``None``，则会自动检测经纪人的实际模式（fundmode-True / False），以决定回报是基于总净资产价值还是基金价值。请参见经纪人文档中的``set_fundmode``

        将其设置为``True``或``False``以获得特定行为

    '''

class Broker(Observer):
    '''这个观察者跟踪经纪人中的现金金额和投资组合价值（包括现金）

    参数：无
    '''

class FundValue(Observer):
    '''这个观察者跟踪当前基金类似价值

    参数：无
    '''

class FundShares(Observer):
    '''这个观察者跟踪当前基金类似份额

    参数：无
    '''

class BuySell(Observer):
    '''
    这个观察者跟踪单个买入/卖出订单（单个执行），并将它们绘制在图表上，绘制在执行价格水平周围的数据上。

    参数：
      - ``barplot``（默认值：``False``）在最小值以下绘制买入信号，在最大值以上绘制卖出信号。

        如果为``False``，则会在一根K线内的执行平均价格上绘制。

      - ``bardist``（默认值：``0.015`` 1.5％）当``barplot``为``True``时，到最大/最小值的距离。
    '''

class DrawDown(Observer):
    '''这个观察者跟踪当前回撤水平（绘制）和最大回撤（不绘制）水平

    参数：

      - ``fund``（默认值：``None``）

        如果为``None``，则会自动检测经纪人的实际模式（fundmode-True / False），以决定回报是基于总净资产价值还是基金价值。请参见经纪人文档中的``set_fundmode``

        将其设置为``True``或``False``以获得特定行为

    '''




class DrawDownLength(Observer):
    '''这个观察者跟踪当前回撤长度（绘制）和最大回撤长度（不绘制）水平

    参数：无
    '''


class DrawDown_Old(Observer):
    '''这个观察者跟踪当前回撤水平（绘制）和最大回撤（不绘制）水平

    参数：无
    '''


class LogReturns(bt.Observer):
    '''这个观察者存储策略或参考资产的*对数回报*。

    参数：

      - ``timeframe``（默认值：``None``）
        如果为``None``，则将报告整个回测期间的完整回报

        传递``TimeFrame.NoTimeFrame``以考虑没有时间限制的整个数据集

      - ``compression``（默认值：``None``）

        仅用于亚日时间框架，例如通过指定“TimeFrame.Minutes”和60作为压缩来在小时时间框架上工作

      - ``fund``（默认值：``None``）

        如果为``None``，则会自动检测经纪人的实际模式（fundmode-True / False），以决定回报是基于总净资产价值还是基金价值。请参见经纪人文档中的``set_fundmode``

        将其设置为``True``或``False``以获得特定行为

    请记住，在``run``的任何时刻，可以通过查看索引为``0``的名称为*lines*的当前值来检查当前值。

    '''


class LogReturns2(LogReturns):
    '''扩展观察者LogReturns以显示两个资产'''


class TimeReturn(Observer):
    '''这个观察者存储策略的*回报*。

    参数：

      - ``timeframe``（默认值：``None``）
        如果为``None``，则将报告整个回测期间的完整回报

        传递``TimeFrame.NoTimeFrame``以考虑没有时间限制的整个数据集

      - ``compression``（默认值：``None``）

        仅用于亚日时间框架，例如通过指定“TimeFrame.Minutes”和60作为压缩来在小时时间框架上工作

      - ``fund``（默认值：``None``）

        如果为``None``，则会自动检测经纪人的实际模式（fundmode-True / False），以决定回报是基于总净资产价值还是基金价值。请参见经纪人文档中的``set_fundmode``

        将其设置为``True``或``False``以获得特定行为

    请记住，在``run``的任何时刻，可以通过查看索引为``0``的名称为*lines*的当前值来检查当前值。

    '''

class Trades(Observer):
    '''这个观察者跟踪完整的交易并绘制交易关闭时实现的PnL水平。

    当头寸从0（或越过0）到X时，交易处于开放状态，然后在回到0（或在相反方向上越过0）时关闭。

    参数：
      - ``pnlcomm``（默认值：``True``）

        显示净/利润和损失，即：扣除佣金后。如果设置为“False”，则会显示佣金前的交易结果。
    '''

